Snowflakeの内部ステージについて調べてみた
こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。
Snowflakeには「ステージ」というSnowflakeのテーブルにファイルからデータをロードする際に、そのファイルを置く場所があります。
「ステージ」の種類としては大きく2つあり、Snowflake内部にある「内部ステージ」と、各種クラウド上(Amazon S3, Google Cloud Storage, Microsoft Azure)に存在するファイルとの架け橋になる「外部ステージ」があるのですが、今回はこのうちの「内部ステージ」について改めて調査、整理してみました。
内部ステージの種類
内部ステージとしては3つの種類があり、それぞれ「ユーザーステージ」、「テーブルステージ」、「名前付きステージ」があります。詳しくは以下の公式ドキュメントに記載されています。
ユーザーステージ
このステージは「ユーザー」に紐づくステージです。各ユーザーにデフォルトで割り当てられています。ユーザーに紐づくのでファイルへのアクセスは自分のみとなり、ファイルは各テーブルにCOPYすることができます。 また、COPYには対象テーブルへのINSERT権限が必要となります。
以下のようなイメージとなります。
では、実際にステージの中身を少しみてみます。ワークシートで以下のコマンドを実行します。
LIST @~
特にこれまで明示的にPUTをしたことはなかったのですが、ワークシートのデータが入っているようですね。
テーブルステージ
このステージは「テーブル」に紐づくステージです。各テーブルにデフォルトで割り当てられています。テーブルに紐づくのでファイルへのアクセスは複数ユーザとなり、ファイルは紐づいているテーブルのみにCOPYすることができます。 また、ステージを利用するには対象テーブルのOWNERSHIP権限が必要となります。
以下のようなイメージとなります。
こちらも実際にステージの中身を少しみてみます。ワークシートで以下のコマンドを実行します。OWNERSHIP権限を持っているテーブルが対象なので、事前にテーブルは作成済みです。
LIST @%TEST
こちらは想定通り、空ですね。
名前付きステージ
このステージはデータベースオブジェクト扱いのステージです。各ユーザや各テーブルと紐づくものではないので、自由に利用、権限制御が可能です。 逆に、自分だけが利用するのであれば「ユーザーステージ」を、単一のテーブルに対して利用するのであれば「テーブルステージ」を使うという使い分けですね。
以下のようなイメージとなります。
こちらはまだステージを作成していないので試せませんでしたが、例えばmy_stage
というステージを作成している場合には、以下のようなコマンドで確認可能なようです。
LIST @my_stage
まとめ
以上、Snowflakeの「内部ステージ」について調べてみました。利用用途によって使い分けが必要そうなので、うまく使い分けていきたいですね。今後は各種ステージそれぞれについて、細かく使い方を見ていきたいなと思います。
どなたかのお役に立てば幸いです。それでは!